package Lee_code;

import java.util.ArrayList;
import java.util.List;

/**
 * @author blh
 * @date 2024年07月08日 9:32
 */
public class Lee_498_78 {
    public int[] findDiagonalOrder(int[][] mat) {
        List<Integer> list = new ArrayList<>();
        int m = mat.length;
        int n = mat[0].length;
        int row = 0, column = 0;
        int indexSum = 0;
        // 遍历的结尾是mat[m][n], 每次遍历下标+1
        while (true) {
            // 斜上
            if (indexSum < m) {
                for (int i = indexSum; i >= 0; i--) {
                    // 判断下标有效
                    if (i < m && (indexSum - i) >= 0 && (indexSum - i) < n) {
                        list.add(mat[i][indexSum - i]);
                    }
                }
            } else {
                for (int i = m - 1; i >= 0; i--) {
                    // 判断下标有效
                    if (i < m && (indexSum) - i < n) {
                        list.add(mat[i][indexSum - i]);
                    }
                }
            }
            indexSum++;
            // 斜下
            if (indexSum > m + n - 2) {
                break;
            }
            if (indexSum < n) {
                for (int i = indexSum; i >= 0; i--) {
                    if (i < n && (indexSum - i) >= 0 && (indexSum - i) < m) {
                        list.add(mat[indexSum - i][i]);
                    }

                }
            } else {
                for (int i = n - 1; i >= 0; i--) {
                    if (i < n && indexSum - i < m) {
                        list.add(mat[indexSum - i][i]);
                    }
                }
            }
            indexSum++;
            if (indexSum > m + n - 2) {
                break;
            }
        }
        return list.stream()
                .mapToInt(Integer::intValue)
                .toArray();
    }
}
